

//prototypes des fonctions

/****************************************************************************
    * Fonction : deltaT
    * Description :- calcul le tps pris entre 2 lectures de gettimeofday()
    * Paramètres : - struct timeval debt, temps au chrono
    *              - struct timeval finT, temps a la fin du chrono
    * Retour: le temps pris entre debt et finT
****************************************************************************/
inline double deltaT(struct timeval debt, struct timeval finT);

/****************************************************************************
    * Fonction : GEMV_2D
    * Description :- calcul leproduit matrice/vecteur dense et enregistre le temps d'execution et les parametre de la matrice dans un fichier
    * Paramètres : - T **A, la matrice dense
    *              - T *u, le vecteur multiplie
    *              - T *v, le vecteur resultat
    * 			   - int dim1, int dim2 les dimensions de la matrice
    * Retour: aucun
****************************************************************************/
void GEMV_2D(T **A,T *u,T *v, int dim1, int dim2, int f_compteur);

/****************************************************************************
    * Fonction : GEMV_2D
    * Description :- calcul leproduit matrice/vecteur dense et enregistre le temps d'execution et les parametre de la matrice dans un fichier
    * Paramètres : - T *A, la matrice dense
    *              - T *u, le vecteur multiplie
    *              - T *v, le vecteur resultat
    * 			   - int dim1, int dim2 les dimensions de la matrice
    * Retour: aucun
****************************************************************************/
void GEMV_1D(T *A,T *u,T *v, int dim1, int dim2, int f_compteur);

/****************************************************************************
    * Fonction : SPMV_COO
    * Description :- calcul le produit matrice_creuse/vecteur et enregistre le temps d'execution et les parametre de la matrice dans un fichier
    *                pour un stockage creux du type COOrdinate, on a une matrice qui contients les indices des valeurs non nuls de la matrice globale
    *                et un tableau qui contient les valeurs non nuls
    * Paramètres : - int **Indices, la matrice d'indices
    *              - T *Values, le tableau de valeurs non nuls
    *              - T *u, le vecteur multiplie
    *              - T *v, le vecteur resultat
    * 			   - int dim la dimension de la matrice
    * Retour: aucun
****************************************************************************/
void SPMV_COO(int **Indice,T *Values,T *u,T *v,int dim, int f_compteur);

/****************************************************************************
    * Fonction : SPMV_CSR
    * Description :- calcul le produit matrice_creuse/vecteur et enregistre le temps d'execution et les parametre de la matrice dans un fichier
    *                pour un stockage creux du type Compressed Storage Row, on a un tableau de taille dim+1 qui stocke le nombre d'elements non nuls par ligne
    *                un tableau de taille le nombre de zero qui stocke les numéros des colonne des elements non nuls
    *                et un tableau de taille le nombre de zero qui stocke la valeurs des coefficients non nuls
    * Paramètres : - int *IA, stocke le nombre d'elements non nuls par ligne
    *              - itn *JA stocke les numéros de colonnes des elements non nuls
    *              - T *Values, le tableau de valeurs non nuls
    *              - T *u, le vecteur multiplie
    *              - T *v, le vecteur resultat
    * 			   - int dim la dimension de la matrice
    * Retour: aucun
****************************************************************************/
void SPMV_CSR(int *IA, int *JA, T *Values,T *u, T *v, int dim, int f_compteur);

/****************************************************************************
    * Fonction : SPMV_EI
    * Description :- calcul le produit matrice_creuse/vecteur et enregistre le temps d'execution et les parametre de la matrice dans un fichier
    *                pour un stockage creux du type Ellpack_Itpack, on a 2 tableaux de tailles dim*Nmax, dont un stocke les valeurs des coefficients non nuls par ligne
    *                et un tableau qui contient les numéros de colonne des elements non nuls
    *              - T **AA stocke les valeurs des coefficients non nuls par ligne
    *              - T *u, le vecteur multiplie
    *              - T *v, le vecteur resultat
    * 			   - int dim la dimension de la matrice
    *              - Nmax = max(Nmax[i]) avec Nmax(i], le nombre maximum de valeurs non nuls sur la ligne i
    * Retour: aucun
****************************************************************************/
void SPMV_EI(T **AA,int **JA,T *u, T *v,int dim,int Nmax, int f_compteur);

/****************************************************************************
    * Fonction : SPMV_BND
    * Description :- calcul le produit matrice_creuse/vecteur et enregistre le temps d'execution et les parametre de la matrice dans un fichier
    *                pour un stockage creux du type BaNDe, on a un tableau de taille dim*(nbBandeInf+nbBandeSup+1) qui stocke le nombre d'elements non nuls par bande
    * Paramètres : - T *u, le vecteur multiplie
    *              - T *v, le vecteur resultat
    * 			   - char* forme, la forme de la matrice
    * 			   - int nbBandeInf, le nombre de bande inf
    *              - int nbBandeSup, le nombre de bande sup
    * Retour: aucun
****************************************************************************/ 
void SPMV_BND(T **Bande,T *u, T *v,int dim,int nbBandeInf,int nbBandeSup, int f_compteur);
